package com.doit.day06

object _科里化 {
  def main(args: Array[String]): Unit = {


    //正常的写法
    def add(a:Int,b:Int)={
      a+b
    }

    //科里化的写法  将一个参数列表里面的多个参数变成多个参数列表的写法
    def add1(a:Int)(b:Int)={
      a+b
    }

    //好处1：传一个参数后，给我会返回一个函数，然后用函数在传参数
    //减少参数的传递
    val res: Int = add(1, 2)
    val f: Int => Int = add1(1)
    val res1: Int = f(2)
    val res2: Any = add1(1)(2)


    //公司有一个商品的定价问题，商品原价100块，但是在不同的节假日打折不一样  双十一打5折，双十二6折  6.18 7折
    def add2(a:Int)(b:Double)={
      a*b
    }

    val d: Double = add2(100)(0.8)
    val d1: Double = add2(100)(0.7)
    val d2: Double = add2(100)(0.6)

    val f1: Double => Double = add2(100)
    f1(0.1)
    f1(0.2)
    f1(0.3)
    f1(0.4)
    f1(0.5)

    //可以更好的做类型推断
/*    def aaa(a:A,b:a.B)={}

    def aaa(a:A)(b:a.B)={}*/

    //3.可以很好的用在隐式转换的参数上.....

  }
}

class A{
  class B
}
